#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import QDesktopWidget, QSizePolicy, QSpacerItem, QMainWindow, QApplication, QLabel, QWidget, QVBoxLayout, QHBoxLayout, QStackedWidget, QPushButton, QDialog, qApp
from PyQt5.QtGui import QIcon, QPixmap, QFont
from PyQt5.QtCore import Qt
import sys,os, subprocess
from kutuphane import asamacizimi,hosgeldiniz,klavye,konum,kullanici,disk,bilgi,kurulum,son

class MerkezPencere(QMainWindow):
    def __init__(self, ebeveyn=None):
        super(MerkezPencere, self).__init__(ebeveyn)
        self.setStyleSheet("font: 11pt Dejavu Sans")
        ##################################
        #Yükleyici için temel değişkenler
        self.toplam_asama_sayisi = 8
        self.bulunulan_asama = 1
        self.s_d = "Türkçe"#secili_dil
        self.d = {}#diller
        self.milis_ayarlar = {}#Milis kurulumu için ayar kaydı
        self.disk = None#disk üzerindeki değişiklikleri uygulamak için sanal olarak kaydediyoruz
        ##################################
        #Yükleyici dilleri tespit ediyor
        self.dil_tespit()

        #Pencere iconumuzu ekledik
        self.setWindowIcon(QIcon("resimler/miliskurlogo.svg"))
        #Penceremize merkez widget tanımladık ve ekledik
        merkez_widget = QWidget()
        self.setCentralWidget(merkez_widget)
        merkez_layout = QVBoxLayout()
        merkez_layout.setContentsMargins(0,0,0,0)
        merkez_widget.setLayout(merkez_layout)

        #Hangi aşamada bulunduğumuzu gösteren bar yukarıya eklendi ve 1.aşama çizildi
        self.asama_label = QLabel()
        merkez_layout.addWidget(self.asama_label)
        self.asama_label.setPixmap(QPixmap(asamacizimi.asama_ciz(self.bulunulan_asama, self.toplam_asama_sayisi)))

        #Asamalarımızı oluşturalım
        self.asamalar = QStackedWidget()
        merkez_layout.addWidget(self.asamalar)

        #ileri ve geri düğmeleri
        dugmeler_kutu = QHBoxLayout()
        dugmeler_kutu.addSpacerItem(QSpacerItem(10, 40, QSizePolicy.Minimum, QSizePolicy.Minimum))
        merkez_layout.addLayout(dugmeler_kutu)
        self.geri_dugme = QPushButton()
        self.geri_dugme.setFont(QFont('SansSerif', 10))
        self.geri_dugme.clicked.connect(self.asama_geri)
        self.geri_dugme.setFixedWidth(150)
        dugmeler_kutu.addWidget(self.geri_dugme)
        dugmeler_kutu.addSpacerItem(QSpacerItem(20,40,QSizePolicy.Expanding,QSizePolicy.Minimum))
        self.ileri_dugme = QPushButton()
        self.ileri_dugme.setFont(QFont('SansSerif', 10))
        self.ileri_dugme.clicked.connect(self.asama_ileri)
        self.ileri_dugme.setFixedWidth(150)
        dugmeler_kutu.addWidget(self.ileri_dugme)
        dugmeler_kutu.addSpacerItem(QSpacerItem(10, 40, QSizePolicy.Minimum, QSizePolicy.Minimum))

        #Aşamalarımızı ekleyelim
        self.asamalar.addWidget(hosgeldiniz.Hosgeldiniz(self))
        self.asamalar.addWidget(klavye.Klavye(self))
        self.asamalar.addWidget(konum.Konum(self))
        self.asamalar.addWidget(kullanici.Kullanici(self))
        self.asamalar.addWidget(disk.Disk(self))
        self.asamalar.addWidget(bilgi.Bilgi(self))
        self.asamalar.addWidget(kurulum.Kurulum(self))
        self.son_asama = son.Son(self)
        self.asamalar.addWidget(self.son_asama)
        self.asama_degistir(self.bulunulan_asama)

    def asama_ileri(self):
        self.bulunulan_asama += 1
        if self.bulunulan_asama == 7:
            self.kurulum_baslat = KurulumBaslat(self)
            self.kurulum_baslat.show()
        else:
            self.asama_degistir(self.bulunulan_asama)

    def asama_geri(self):
        self.bulunulan_asama -= 1
        self.asama_degistir(self.bulunulan_asama)

    def asama_degistir(self,asama):
        self.bulunulan_asama = asama
        if asama == 1:
            self.geri_dugme.setDisabled(True)
        else:
            self.geri_dugme.setDisabled(False)
        if asama == 8:
            self.geri_dugme.setDisabled(True)
            self.ileri_dugme.setText(self.d[self.s_d]["Son"])
        self.ileri_dugme.setDisabled(False)
        if asama == 9:
            if self.son_asama.kapanacak_mi:
                os.system("shutdown -r now")
            else:
                qApp.closeAllWindows()
        else:
            self.asamalar.setCurrentIndex(asama-1)
            self.asama_label.setPixmap(QPixmap(asamacizimi.asama_ciz(self.bulunulan_asama,self.toplam_asama_sayisi)))

    def dil_tespit(self):
        _dil_uzanti="txt"
        diller = os.listdir("diller")
        for dil in diller:
            eklenecek_dil = {}
            if dil.endswith('.' + _dil_uzanti):
                dil_adi = os.path.splitext(dil)[0]
                dosya = open("diller/" + dil,"r")
                okunan = dosya.read()
                dosya.close()
                for satirlar in okunan.split("\n"):
                    bol = satirlar.split("::")
                    varmi = eklenecek_dil.get(bol[0], "yok")
                    if varmi == "yok" and len(bol) == 2:
                       eklenecek_dil[bol[0]] = bol[1]
                self.d[dil_adi] = eklenecek_dil

    def komutCalistirFonksiyon(self, komut):
        try:
            out = subprocess.check_output(komut, stderr=subprocess.STDOUT, shell=True, universal_newlines=True)
            return out.replace("\b", "")
        except subprocess.CalledProcessError as e:
            return e.output


class KurulumBaslat(QDialog):
    def __init__(self, ebeveyn=None):
        super(KurulumBaslat, self).__init__(ebeveyn)
        self.e = ebeveyn

        self.setFixedWidth(400)
        kutu = QVBoxLayout()
        self.setLayout(kutu)

        dugme_kutu = QHBoxLayout()
        kutu.addLayout(dugme_kutu)
        label_icon = QLabel()
        label_icon.setPixmap(QPixmap("resimler/tehlike.svg"))
        label_icon.setFixedSize(50,50)
        dugme_kutu.addWidget(label_icon)
        label = QLabel()
        label.setWordWrap(True)
        label.setText(self.e.d[self.e.s_d]["Devam etmeniz halinde değişiklikler disklere uygulanacaktır. Devam etmek istiyormusunuz?"])
        dugme_kutu.addWidget(label)

        dugme_kutu = QHBoxLayout()
        dugme_kutu.setAlignment(Qt.AlignRight)
        kutu.addLayout(dugme_kutu)
        dugme_tamam = QPushButton()
        dugme_tamam.setFixedWidth(100)
        dugme_tamam.clicked.connect(self.kurulum_baslat)
        dugme_tamam.setText(self.e.d[self.e.s_d]["Devam Et"])
        dugme_kutu.addWidget(dugme_tamam)
        dugme_vazgec = QPushButton()
        dugme_vazgec.setFixedWidth(100)
        dugme_vazgec.clicked.connect(self.vazgec)
        dugme_vazgec.setText(self.e.d[self.e.s_d]["Vazgeç"])
        dugme_kutu.addWidget(dugme_vazgec)

    def kurulum_baslat(self):
        self.e.bulunulan_asama = 7
        self.e.asama_degistir(7)
        QDialog.accept(self)

    def vazgec(self):
        self.e.bulunulan_asama -= 1
        QDialog.accept(self)


if __name__ == "__main__":
    uygulama = QApplication(sys.argv)
    uygulama.setOrganizationName('Milis Linux')
    uygulama.setApplicationName('Milis Yukleyici')
    merkezPencere = MerkezPencere()
    ekran_yuksekligi = QDesktopWidget().screenGeometry().height()
    if ekran_yuksekligi > 600:
        #Pencere boyutunu 950 ye 600 olarak ayarladık
        merkezPencere.setFixedWidth(950)
        merkezPencere.setFixedHeight(600)
        merkezPencere.show()
    else:
        merkezPencere.showFullScreen()
    sys.exit(uygulama.exec_())
